class StopWatch {
    constructor() {
        this.timers = new Map(); // 保存 {key -> startTime}
    }

    /**
     * 开始计时
     * @param {string} [key="default"] 分组名称（可选），不传则使用 "default"
     * @example
     * const sw = new StopWatch();
     * sw.start("build");
     */
    start(key = "default") {
        this.timers.set(key, Date.now());
    }

    /**
     * 结束计时
     * 返回与 start 的时间差（秒，保留 3 位小数）
     * @param {string} [key="default"] 分组名称（可选），不传则使用 "default"
     * @returns {number} 耗时秒数
     * @example
     * const sw = new StopWatch();
     * sw.start("taskA");
     * setTimeout(() => {
     *   console.log(sw.end("taskA")); // 例如 2.001
     * }, 2000);
     */
    end(key = "default") {
        if (!this.timers.has(key)) {
            throw new Error(`分组 "${key}" 未开始计时，请先调用 start("${key}")`);
        }
        const duration = ((Date.now() - this.timers.get(key)) / 1000).toFixed(3);
        this.timers.delete(key); // 用完就清理
        return duration;
    }
}

// 使用示例
const sw = new StopWatch();

sw.start("build");
setTimeout(() => {
    console.log("build 耗时:", sw.end("build"), "秒");
}, 1500);

sw.start("test");
setTimeout(() => {
    console.log("test 耗时:", sw.end("test"), "秒");
}, 3000);
